"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/5/27 13:37
@Description : 
python类中的魔术方法 ：
在类中已经默认提供的方法 而且这些方法不需要手动调用, 在类的对象执行某些操作时会自动触发方法的执行

1. def __init__(self):  类中的初始化方法  创建对象时自动执行
2. def __new__(cls, *args, **kwargs):   创建对象   先执行  必须返回创建的实例对象 否则 init()不会执行

设计模式:
1. 单例模式  同一个类创建的多个对象,多个对象是同一个对象
"""
class Aoo:
    # 存储当前类的实例
    __instance = None

    # 对象初始化
    def __init__(self, num):
        self.num = num
        print('Aoo  init()')

    """
      # 对象创建  要有返回值
    def __new__(cls, *args, **kwargs):
        print('Aoo  __new__()')
        return super().__new__(cls)
    """

    # 单例模式
    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = super().__new__(cls)
        return cls.__instance


if __name__ == '__main__':
    aoo1 = Aoo(10)
    print(id(aoo1))  # 1947802184832   单例   1961452285056
    aoo2 = Aoo(10)
    print(id(aoo2))  # 1947802183296   单例   1961452285056
    print(aoo1 == aoo2)  #  True
